# 第一步：导入所需的库
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report

# 第二步：加载鸢尾花数据集
# 使用sklearn自带的鸢尾花数据集
data = load_iris()
X = data.data  # 特征数据（花的萼片和花瓣的长度、宽度）
y = data.target  # 标签数据（花的品种）

# 第三步：将数据集分为训练集和测试集
# 80%的数据用来训练，20%的数据用来测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 第四步：数据标准化
# KNN对数据尺度敏感，因此我们需要将数据标准化，使每个特征的均值为0，方差为1
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)  # 标准化训练数据
X_test_scaled = scaler.transform(X_test)  # 标准化测试数据（使用训练数据的标准化方式）

# 第五步：创建KNN模型并训练
# 使用K近邻算法（KNN）进行分类，选择K=3，即考虑3个邻居
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train_scaled, y_train)  # 用训练数据训练模型

# 第六步：在测试集上进行预测
y_pred = knn.predict(X_test_scaled)

# 第七步：评估模型
# 输出模型的准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率：{accuracy:.2f}")

# 输出详细的分类报告
print("\n分类报告：")
print(classification_report(y_test, y_pred))

